import {Body, Controller, Get, Post, Query, Render, Request, Response} from '@nestjs/common';
import {ToolsService} from "../../../../service/tools/tools.service";
import {UsersService} from "../../../../service/users/users.service";

@Controller('admin/auth')
export class AuthController {
    constructor(
        private readonly toolsService: ToolsService,
        private readonly usersService: UsersService
    ) {
    }

    // 生成验证码图片并返回给客户端。
    @Get('code')
    getCode(@Request() req, @Response() res) {
        const svgCaptcha = this.toolsService.getCaptcha();
        req.session.captcha = svgCaptcha.text; // 将验证码文本存储到会话（session）中，用于后续验证。
        res.type('image/svg+xml'); // 设置响应类型为 SVG 图片。
        res.send(svgCaptcha.data); // 将生成的 SVG 图片发送给客户端。
    }


    // 登录页面渲染
    @Get('login')
    @Render('login')
    login() {
        return {}
    }

    // 处理登录请求
    @Post('doLogin')
    async doLogin(@Body() body, @Request() req, @Response() res) {
        const {username, password, captcha} = body;
        // 步骤 1：验证验证码
        if (!captcha || captcha.toUpperCase() !== req.session.captcha.toUpperCase()) {
            await this.toolsService.tips(res, {
                type: 'error',
                redirectUrl: '/admin/auth/login',
                message: '验证码错误！'
            })
            return;
        }
        // 步骤 2：验证用户名和密码
        const resp = await this.usersService.findOne({
            username,
            password: this.toolsService.getMd5(password),
        })
        if (!resp || !resp.id) {
            await this.toolsService.tips(res, {
                type: 'error',
                redirectUrl: '/admin/auth/login',
                message: '账号或密码错误！'
            })
            return;
        }
        // 登录成功
        req.session.userinfo = resp;
        res.redirect('/admin/dashboard')
    }

    // 退出登录
    @Get('logout')
    async logout(@Request() req, @Response() res) {
        req.session.userinfo = null;
        res.redirect('/admin/auth/login')
    }
}
